package com.ziytek.web.citizen.mapper;

import com.ziytek.web.citizen.configuration.db.DDS;
import com.ziytek.web.citizen.constant.DdsConstant;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

/**
 * @author fengh
 */
@Mapper
public interface BasicTableMapper {

    /**
     * 动态创建表
     *
     * @param tableName 表名
     */
//    @Update("CREATE TABLE IF NOT EXISTS " +
//            " `${tableName}`( `id` INTEGER PRIMARY KEY AUTOINCREMENT," +
//            "`name` VARCHAR(20) NOT NULL)")
    @DDS(DdsConstant.DS_BASIC)
    @Update("CREATE TABLE IF NOT EXISTS " +
            " `${tableName}` ( ${createSql})")
    void createTable(@Param("tableName") String tableName, @Param("createSql") String createSql);


    /**
     * 动态创建表索引(唯一索引)
     *
     * @param tableName 表名
     * @param indexName 索引名称
     * @param columns   索引字段
     */
    @Delete("CREATE UNIQUE INDEX IF NOT EXISTS `${indexName}` " +
//            "ON `${tableName}` (`email`, `username`);")
            "ON `${tableName}` (${columns});")
    @DDS(DdsConstant.DS_BASIC)
    void createUniqueIndex(@Param("tableName") String tableName, @Param("indexName") String indexName, @Param("columns") String columns);

    /**
     * 动态创建表索引
     *
     * @param tableName 表名
     * @param indexName 索引名称
     * @param columns   索引字段
     */
    @Delete("CREATE INDEX IF NOT EXISTS `${indexName}` " +
            "ON `${tableName}` (${columns});")
    @DDS(DdsConstant.DS_BASIC)
    void createIndex(@Param("tableName") String tableName, @Param("indexName") String indexName, @Param("columns") String columns);


    /**
     * 动态删除表索引
     *
     * @param indexName 索引名称
     */
    @Delete("DROP INDEX IF EXISTS ${indexName}")
    @DDS(DdsConstant.DS_BASIC)
    void dropIndex(@Param("indexName") String indexName);
}
